Lese inn data og modellere med standardspesifikasjoner
setwd("/ssb/bruker/felles/kurs_sesongjustering") # sette working directory. Bruk gjerne din hjemmemappe
#setwd("ssb/bruker/[dine initialer her]")
# Henter data fra statistikkbanken
VHI <- select(as_tibble(ApiData("https://data.ssb.no/api/v0/no/table/07129/",ContentsCode ="VolumUjustert",Tid=TRUE,NACE=TRUE)$dataset),-ContentsCode,-NAstatus)
VHI <- mutate(VHI,NACE=paste0(paste0("SNN",NACE),"_IVL_U"))
VHI <- pivot_wider(VHI,names_from=NACE,values_from=value)
## Velger ut Varehandelsindeksen for dagligvarehandel. Gjøre om til tidsserie-objekt
VHI_471 <- as.numeric(VHI$SNN47.1_IVL_U)
VHI_471 <- ts(VHI_471,start=c(2000,1),frequency=12)
# sesongjustering med spefikasjon RSA5c
model_rsa5c <- x13(VHI_471,spec = "RSA5c")
# se nærmere på resultatet:
model_rsa5c$regarima # detaljer om forhåndsjustering
model_rsa5c$final$series # komponentene
model_rsa5c$decomposition # informasjon om filterlengder
model_rsa5c$diagnostics # tester for residualsesong
# ulike typer innebygde plot
plot(model_rsa5c,type_chart="sa-trend")

plot(model_rsa5c,type_chart="sa-trend",first_date=c(2015,1))

plot(model_rsa5c,type="cal-seas-irr")

plot(model_rsa5c,type="cal-seas-irr",first_date=c(2015,1))

plot(model_rsa5c$decomposition,type="S-I-ratio",first_date=c(2015,1))

# for mer fancy plot, se nederst i dokumentet
Endre spesifikasjoner
# Tar utgangspunkt i spec rsa5c som vi må lagre som eget objekt for å endre på det.
rsa5c_spec <- x13_spec(model_rsa5c)
## Sette multiplikativ eller additiv modell manuelt
rsa5c_additiv <- x13_spec(rsa5c_spec, transform.function = "None") ## "Log" for multiplikativ
model_rsa5c_add <- x13(VHI_471,rsa5c_additiv)
# sette workingdays eller tradingdays manuelt
rsa5c_wd <- x13_spec(rsa5c_spec,tradingdays.option= "WorkingDays")
rsa5c_td <- x13_spec(rsa5c_spec,tradingdays.option= "TradingDays")
rsa5c_notd <- x13_spec(rsa5c_spec,tradingdays.option= "None")
# sette outliers manuelt
rsa5c_outlier <- x13_spec(rsa5c_spec,usrdef.outliersEnabled = TRUE,usrdef.outliersType = c("LS","AO","AO"),usrdef.outliersDate = c("2020-03-01","2020-06-01","2021-12-01"))
# sette outliers span fra
rsa5c_outlier_span <- x13_spec(rsa5c_spec,outlier.from="2022-01-01")
# skru av outliers
rsa5c_no_outlier <- x13_spec(rsa5c_spec,outlier.enabled=FALSE)
rsa5c_no_tc <- x13_spec(rsa5c_spec,outlier.tc=FALSE)
# estimere fra
rsa5c_fom2008 <- x13_spec(rsa5c_spec,estimate.from="2008-01-01")
### ?x13_spec viser de uendelige muligheter man har til å mikke på spec'ene
Definere kalendere med funksjonen konstruksjon()
# sjekk ?konstruksjon for informasjon om parametere
kalender_1 <- konstruksjon(forste_ar = 2000, siste_ar = 2050,
k_roddag = TRUE, t_roddag = "sondag",
rod_dag = c("jan1", "mai1", "mai17", "des24", "des25", "des26"),
k_fpk = TRUE, ant_fpk = 7, t_fpk = "egen_effekt",
paske_egen = 1, paske_mdl = "X12", t_pklordag = "egen_effekt",
t_pinse = "sondag", k_td = TRUE, td_type = "TD6",
k_grupper = TRUE, monster = c(1, 1, 2, 2, 2, 3),
fjerne_se_td = TRUE, skudd_ar = TRUE)$samle_mnd[,-1]
kalender_1 <- ts(kalender_1,start=c(2000,1),frequency=12)
### sesongjustere med egendefinert kalender
kalender1_spec <- x13_spec(rsa5c_spec,usrdef.varEnabled= TRUE, usrdef.varType = "Calendar",usrdef.var=kalender_1)
model_kalender1 <- x13(VHI_471,kalender1_spec)
Pickmdl()-funksjonen
## pickmodell - velge kun blant fem modeller på listen
model1 <- x13_pickmdl(VHI_471,spec=kalender1_spec,pickmdl_method = "first",identification_end=c(2022,12))
# informasjon om pickmodel-prosedyre:
ok(model1)
## pickmodell - forsøke automodell hvis modellene på listen ikke er tilfredsstillende
model2 <- x13_pickmdl(VHI_471,spec=kalender1_spec,pickmdl_method = "first_tryautomdl",identification_end=c(2022,12))
## pandemien som level shift i tråd med SSBs anbefalinger
model1_corona <- x13_pickmdl(VHI_471,spec=kalender1_spec,pickmdl_method = "first_tryautomdl",identification_end=c(2022,12),corona=TRUE)
ok(model1_corona)
Interaktive plot med plotly
library(plotly)
library(htmltools)
model1_corona <- x13_pickmdl(VHI_471,spec=kalender1_spec,pickmdl_method = "first_tryautomdl",identification_end=c(2022,12),corona=TRUE)
start_now <- c(2000,1)
data_now <- ts(c(model1_corona$final$series[,1],rep(NA,12)),start=start_now,frequency=12)
model_sa <- ts(c(model1_corona$final$series[,2],model1_corona$final$forecast[,2]),start=start_now,frequency=12)
model_trend <- ts(c(model1_corona$final$series[,3],model1_corona$final$forecast[,3]),start=start_now,frequency=12)
model_selected <- data.frame(cbind(as.numeric(time(data_now)),data_now,model_sa,model_trend))
colnames(model_selected) <- c("date","Ujustert","SA","Trend")
tagList(plot_ly(model_selected,type= 'scatter',mode='lines') %>%
layout(xaxis=list(title="")) %>%
add_trace(x = ~date_decimal(date), y = ~Ujustert,name="Ujustert",line=list(color="lightslategrey",dash='dot',width=1)) %>%
add_trace(x = ~date_decimal(date), y = ~SA,name="SA",line=list(color="darkblue")) %>%
add_trace(x = ~date_decimal(date), y = ~Trend,name="Trend",line=list(color="tomato",dash="dot")))